package xin.marcher.module.quality.oss;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.InputStream;

/**
 *
 */
public interface OssManager {
    /**
     * 上传文件
     * 返回的是文件下载地址
     *
     * @param bucketName      bucketName
     * @param fileInputStream 文件输入流
     * @param path            目录
     * @param fileName        文件名字
     * @return 文件下载地址
     */
    public String uploadFile(String bucketName, InputStream fileInputStream, String path, String fileName);

    /**
     * 上传文件
     * 返回的是文件下载地址
     *
     * @param fileInputStream 文件输入流
     * @param path            目录
     * @param fileName        文件名字
     * @return 文件下载地址
     */
    public String uploadFile(InputStream fileInputStream, String path, String fileName);

    /**
     * 上传文件
     * 返回的是文件下载地址
     *
     * @param originUrl 源URL
     * @param path      目录
     * @param fileName  文件名字
     * @return 文件下载地址
     */
    public String uploadFile(String originUrl, String path, String fileName);

    /**
     * 上传文件，分片上传
     *
     * @param bucketName    buckName
     * @param ossObjectName oss中文件的名字（包含路径）
     * @param file          文件对象
     * @return 文件下载地址
     * @throws Exception
     */
    public String uploadFile(String bucketName, String ossObjectName, File file) throws Exception;

    /**
     * 生成文件下载地址
     *
     * @param bucketName bucketName
     * @param fileName   oss中文件的名字（包含路径）
     * @return 下载url地址
     */
    public String generateFileDownLoadUrl(String bucketName, String fileName, long expirationTime);

    /**
     * 生成文件下载地址
     *
     * @param fileName       oss中文件的名字（包含路径）
     * @param expirationTime URL过期时间
     * @return 下载url地址
     */
    public String generateFileDownLoadUrl(String fileName, long expirationTime);

    /**
     * 生成文件下载地址
     *
     * @param bucketName bucketName
     * @param fileName   oss中文件的名字（包含路径）
     * @return 下载url地址
     */
    public String generateFileDownLoadUrl(String bucketName, String fileName);

    /**
     * 生成文件下载地址
     *
     * @param fileName oss中文件的名字（包含路径）
     * @return 下载url地址
     */
    public String generateFileDownLoadUrl(String fileName);


    /**
     * 授权上传
     */
    public String authorizeUpload(String ossPath, String bucketName);


    public void download(String ossObjectName, String localPath);

    /**
     * 下载文件，返回到前端
     *
     * @param fileName
     * @param ossObjectName
     * @param response
     */
    public void downloadFile(String fileName, String ossObjectName, HttpServletResponse response);
}
